package com.example.workflow.annotation;

import com.example.workflow.flow.ResubmitKeyPrefixTypeEnum;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 *为了避免短时间内重复调用同一方法，特别是相同参数的调用，我们通过一个 key 来判断是否为重复请求。key 由调用方提供，用于标识每次调用。只有当两次调用的 key 相同，才会被视为重复请求。
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Resubmit {

    /*
    key 的前缀类型
     */
    ResubmitKeyPrefixTypeEnum keyPrefix() default ResubmitKeyPrefixTypeEnum.URL_PATH;

    /*
    如果指定了key，通过${} 方式从参数中取值；如果未指定key，则从ApiRequestKey#getKey中取值
     */
    String key() default "";

    /**
     * 允许两次相同调用的最短时间间隔，单位 - 秒
     * @return
     */
    long limitation() default 0;

    /**
     * 超时时间，单位 - 秒；超过这个时间解除限制，默认5秒
     *
     * @return
     */
    long timeout() default 2;
}
